<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		// class CondingMan{
		// 	constructor(str) {
		// 		this.arr = [];
		// 	    this.str = str;
		// 	    let self = this;
		// 	    let fn = (function(n) {
		// 			var name = n;
		// 			return function() {
		// 				console.log("Hi! This is " + name + "!");
		// 				self.next();
		// 			}
		// 		})(str);
				
		// 		this.arr.push(fn);
		// 		setTimeout(function() {
		// 			self.next();
		// 		}, 0);
		//   	}
		// 	next(){
		// 		console.log('this.arr',this.arr)
		// 		let fn = this.arr.shift();
		// 		fn && fn();
		// 	}
		// 	eat(p){
		// 		let self = this;
		// 		let fn = (function(p){
		// 			return function(){
		// 				console.log("eat" + p );
		// 				self.next();
		// 			}
		// 		})(p)
		// 		this.arr.push(fn);
		// 		return this;
		// 	}
		// 	sleep(ms) {
		// 		let self = this;
		// 		let fn = (function(ms){
		// 			return function(){
		// 				if(typeof(ms) != "number"){
		// 					alert("请输入数字")
		// 					return this;
		// 				}
		// 				let start = (new Date()).getTime();
		// 				while ((new Date()).getTime() - start < ms*1000) {
		// 				    continue;
		// 				}
		// 				console.log(`停留了${ms}秒`)
		// 				self.next();
		// 			}
		// 		})(ms)
		// 		this.arr.push(fn)
		// 		return this;
		// 	}
		// 	sleepFirst(ms){
		// 		let self = this;
		// 		let fn = (function(ms){
		// 			return function(){
		// 				if(typeof(ms) != "number"){
		// 					alert("请输入数字")
		// 					return this;
		// 				}
		// 				let start = (new Date()).getTime();
		// 				while ((new Date()).getTime() - start < ms*1000) {
		// 				    continue;
		// 				}
		// 				console.log(`停留了${ms}秒`)
		// 				self.next();
		// 			}
		// 		})(ms)
		// 		this.arr.unshift(fn);
		// 		return this;
		// 	}
		// }
		// function condingMan(str){
		// 	let obj = new CondingMan(str);
		// 	 return obj;
		// }
		// condingMan("li").eat("12").sleepFirst(1).eat("22");

		class CondingMan{
			constructor(name){
				this.arr = [];
				this.listen(function(){
					console.log(`Hello ${name}`)
				})
				setTimeout(()=>{
					this.arr.forEach((item)=>{
						item()
					})
				},0)
			}
			listen(fn,type){
				if(type){
					this.arr.push(fn)
				}else{
					this.arr.unshift(fn)
				}
			}
			eat(something){
				this.listen(function(){
					console.log(something)
				},true)
				return this;
			}
			sleep(time){
				this.listen(function(){
					let start = (new Date()).getTime();
					while ((new Date()).getTime() - start < time*1000) {
						continue;
					}
					console.log(`waite ${time}`)
				},true)
				return this;
			}
			sleepFirst(time){
				this.listen(function(){
					let start = (new Date()).getTime();
					while ((new Date()).getTime() - start < time*1000) {
						continue;
					}
					console.log(`waite ${time}`)
				},false)
				return this;
			}
		}
		function condingMan(name){
			return new CondingMan(name)
		}
		condingMan('Peter').sleepFirst(3).eat('milk')
		
		
		
		
		
	</script>
</html>
